package com.isoft.c2team3service2.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.isoft.c2team3service2.dto.PostDTO;
import com.isoft.c2team3service2.entity.Post;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.util.List;

/**
 * 帖子服务接口
 */
public interface PostService extends IService<Post> {
    /**
     * 创建新帖子
     */
    boolean createPost(MultipartFile file, String title, String content, Integer isPaid, Integer isPrivate, BigDecimal price);

    /**
     * 根据ID查询帖子
     */
    Post findById(Integer id);

    /**
     * 查询用户的所有帖子
     */
    List<PostDTO> findByUserId(Integer userId);

    /**
     * 查询热门帖子
     */
    List<PostDTO> findHotPosts(int limit);

    /**
     * 查询最新帖子
     */
    List<PostDTO> findLatestPosts(int limit);

    /**
     * 更新帖子
     */
    boolean updatePost(Post post ,MultipartFile  file);

    /**
     * 增加帖子浏览量
     */
    boolean increaseViewCount(Integer id);

    /**
     * 点赞帖子
     */
    boolean likePost(Integer id);

    /**
     * 取消点赞帖子
     */

    boolean unlikePost(Integer id);

    /**
     * 设置帖子私密状态
     * @param postId 帖子ID
     * @param userId 操作人用户ID
     * @param isPrivate 私密状态（1=私密，0=公开）
     * @return 是否操作成功
     */
    boolean setPostPrivate(Integer postId, Integer userId, Integer isPrivate);

    /**
     * 根据用户ID查询其发布的私密帖子
     * @param userId 用户ID（帖子作者ID）
     * @return 该用户的所有私密帖子列表（已发布状态）
     */
    List<Post> findPrivatePostsByUserId(Integer userId);

    // 新增物理删除方法声明
    boolean deletePost(Integer postId, Integer userId);


    /**
     * 设置帖子为付费内容
     * @param postId 帖子ID
     * @param userId 用户ID
     * @param isPaid 是否付费
     * @param price 价格
     * @return 设置结果
     */
    boolean setPostPaid(Integer postId, Integer userId, boolean isPaid, BigDecimal price);




    /**
     * 查询公开的付费帖子（排除私密帖和非付费帖）
     * @param limit 最大返回数量
     * @return 符合条件的付费帖子列表
     */
    List<Post> findPublicPaidPosts(int limit);
// PostService.java
    /**
     * 根据艺人ID查询提及该艺人的公开帖子
     */
    List<Post> findPublicPostsByArtistId(Integer artistId, int limit);
    /**
     * 新增：创建帖子并关联艺人标签（提及艺人）
     * @param artistNames 提及的艺人名称列表（逗号分隔，如"周杰伦,林俊杰"）
     */
    boolean createPostWithArtistTags(MultipartFile file, String title, String content,
                                     Integer isPaid, Integer isPrivate, BigDecimal price,
                                     String artistNames);

    /**
     * 新增：按艺人名称模糊查询提及该艺人的公开帖子
     * @param artistName 艺人名称（支持模糊匹配）
     * @param limit 最大返回数量
     */
    List<PostDTO> findPostsByArtistNameLike(String artistName, int limit);

    List<PostDTO> searchPosts(String content);

    boolean checkLikeStatus(Integer id);
}